Aller au contenu principal

SDK Android

Ajoutez AR Clip VPS à une application Android native. Sur les appareils ARCore, le SDK trouve la position de l'utilisateur sur vos cartes VPS. Il est livré avec des fragments Sceneform et des outils pour gérer le cycle de vie.

Avant de commencer​

  • Android SDK 24 (Android 7.0) ou plus récent
  • Un appareil compatible ARCore
  • Un projet Kotlin (les exemples sont en Kotlin)
Besoin d'une clé d'API ?

Obtenez-en une sur arclip.design ou écrivez à support@arclip.design.

Installation​

  1. Vérifiez que le projet récupère les artefacts depuis Maven Central :

    allprojects {
    repositories {
    mavenCentral()
    // other repositories...
    }
    }
  2. Ajoutez la dépendance au module de votre application :

    dependencies {
    implementation "com.arstudio:wasvps-sdk:1.0.0"
    }
  3. Synchronisez Gradle.

Configurer le manifeste​

Déclarez l'exigence ARCore. Si le minSdk de votre propre application est inférieur à 24, ajoutez aussi le contournement uses-sdk, sinon le build échoue. Le SDK lui-même a quand même besoin d'Android 7.0 (API 24) ou plus récent.

<!-- Only if your app's minSdk is below 24 -->
<uses-sdk tools:overrideLibrary="com.arstudio.wasvps_sdk, com.google.ar.sceneform.sceneform, com.google.ar.sceneform.ux" />

<!-- Restrict to ARCore hardware (default). Set required=false to broaden install base. -->
<uses-feature
android:name="android.hardware.camera.ar"
android:required="true" />

Pour que l'application soit proposée à plus d'appareils sur le Play Store, réglez android:required="false" et ajoutez tools:replace="android:required", pour que votre valeur remplace celle du SDK :

<uses-feature
android:name="android.hardware.camera.ar"
android:required="false"
tools:replace="android:required" />

Démarrage rapide avec WASVPSArFragment​

Ajoutez le fragment fourni à votre layout :

<!-- res/layout/activity_main.xml -->
<androidx.fragment.app.FragmentContainerView
android:id="@+id/vFragmentContainer"
android:name="com.arstudio.wasvps_sdk.ui.WASVPSArFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

supportFragmentManager.beginTransaction()
.replace(R.id.vFragmentContainer, WASVPSArFragment())
.commit()
}
}

Une fois que vous avez vos identifiants de lieu, récupérez le service et lancez la localisation :

val fragment = supportFragmentManager
.findFragmentById(R.id.vFragmentContainer) as WASVPSArFragment

val config = WASVPSConfig.getIndoorConfig(listOf("your-location-id"))
val service = fragment.vpsService

service.setVpsConfig(config)
service.setVpsCallback(object : VpsCallback {
override fun onSuccess() = Unit
override fun onFail() = Unit
override fun onStateChange(state: State) = Unit
override fun onError(error: Throwable) {
Log.e("VPS", "Localization error", error)
}
})

service.startVpsService()

Appelez service.stopVpsService() quand l'expérience AR doit se mettre en pause, par exemple dans onPause.

Utiliser votre propre fragment​

Si vous avez votre propre ArFragment ou ArSceneView, créez et gérez WASVPSService vous-même :

class CustomArFragment : ArFragment() {
private val vpsService = WASVPSService.newInstance()

override fun onAttach(context: Context) {
super.onAttach(context)
WASVPSSdk.init(context.applicationContext)
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
vpsService.bindArSceneView(arSceneView)
vpsService.setVpsConfig(WASVPSConfig.getOutdoorConfig(listOf("location-id")))
}

override fun onResume() {
super.onResume()
vpsService.resume()
vpsService.startVpsService()
}

override fun onPause() {
vpsService.pause()
vpsService.stopVpsService()
super.onPause()
}

override fun onDestroyView() {
vpsService.destroy()
super.onDestroyView()
}
}

Placer du contenu​

Ajoutez des nœuds comme enfants de vpsService.worldNode. Dès que le VPS a réussi, chaque enfant suit la position globale localisée.

val anchorNode = Node().apply {
setParent(vpsService.worldNode)
localPosition = Vector3(0f, 0f, -1f)
}

Dépannage​

  • Vérifiez que Google Play Services for AR est installé et à jour sur l'appareil de test.
  • Si la localisation ne réussit jamais, vérifiez la clé d'API transmise au SDK (via une configuration sécurisée), et vérifiez que vos identifiants de lieu existent.
  • Le module /sample du dépôt contient un exemple complet, y compris les autorisations d'exécution et l'interface.